/* eslint-disable jsdoc/no-restricted-syntax */
import { serialize } from "seroval";

const object = {
  number: [Math.random(), -0, Number.NaN, Infinity, -Infinity],
  string: ["hello world", "<script>Hello World</script>"],
  boolean: [true, false],
  null: null,
  undefined,
  bigint: 9007199254740991n,
  // eslint-disable-next-line no-sparse-arrays
  array: /** @type {*[]} */ ([, , ,]), // holes
  regexp: /[a-z0-9]+/i,
  date: new Date(),
  map: new Map([["hello", "world"]]),
  set: new Set(["hello", "world"]),
};

// // self cyclic references
// // recursive objects
// eslint-disable-next-line no-warning-comments
// @ts-ignore
object.self = object;
// // recursive arrays
// // @ts-ignore
// object.array.push(object.array);
// // recursive maps
// // @ts-ignore
// object.map.set('self', object.map);
// // recursive sets
// // @ts-ignore
// object.set.add(object.set);

// // mutual cyclic references
// // @ts-ignore
// object.array.push(object.map);
// // @ts-ignore
// object.map.set('mutual', object.set);
// // @ts-ignore
// object.set.add(object.array);

const result = serialize(object);
console.log(result);
